<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script type="text/javascript">
        /**
        * 对象的类型：
        * - 内建对象
        * - 自定义对象
        * - 数组对象
        */
        //创建数组元素
        var list = new Array();
        list[0] = "text";
        list[1] = "text2";
        list[2] = 1;
        list[1] = 1;

        /* Array.prototype.toString = function(){
            for(varName in this){
                console.log(varName+" = "+this[varName]);
            }
        } */


        console.log(list);
        //快速创建
        arr = [];
        arr1 = [1,2,3,4,5,6,];
        arr2 = new Array(1,2,2,3,4);

        arr3 = new Array(10); //长度为10

        // 连续个数  = max(index) + 1,可修改length用于设置 
        list.length;
        
        //使其数据元素添加连续
        list[list.length] = list.length;
        
        // 数组也是对象
        list.name = "list";

        for(item in arr2){
            console.log("index = "+item);
            console.log("value = "+arr2[item]);
        }
        
        //push 方法：该方法可以将向数组末尾添加一个或多个元素，并返回新数组的长度。
        var newLength = arr.push("a","b","C");

        //pop 方法：该方法取出数组中元素，依次弹出[从后向前]
        while(arr.length){
            console.log(arr.pop());
        }

        //unshift 方法：该方法可以将向数组开头添加一个或多个元素，并返回新数组的长度。
        var newLength = arr.unshift("a","b","c");

        //shift 方法：该方法取出数组中元素，依次弹出[从前向后]
        while(arr.length){
            console.log(arr.shift());
        }

        //for循环取数组元素
        var newLength = arr.push("a","b","c");
        for(var i = 0;i < arr.length;i++){
            console.log("arr["+i+"]="+arr[i]);
        }

        //keys 方法：该方法返回一个新的Array Iterator对象，该对象包含数组中每个索引的键。
        console.log("------keys------");
        for(var item of arr.keys()){
            console.log(item);
        }

        for(var item of Object.keys(arr)){
            console.log(item);
        }
        
        //forEach 方法: 该方法为数组中的每个元素调用一次给定的函数。
        //参数解释：element：数组中正在处理的当前元素。 index：数组中正在处理的当前元素的索引。 array：forEach()方法被调用的数组。
        console.log("------forEach------");
        arr.forEach((element,index)=>{
            console.log("index = "+index);
            console.log("value = "+element);
        })

        //slice 方法：该方法返回一个新数组，该数组是由begin和end参数指定的原数组的浅拷贝（包括begin，不包括end）。
        console.log("------slice------");
        arr.push("joe","josh","peter")
        arr.slice(1).forEach((element,index)=>{
            console.log("index = "+index);
            console.log("value = "+element);
        })
        console.log("------slice2------");
        arr.slice(1,2).forEach((element,index)=>{
            console.log("index = "+index);
            console.log("value = "+element);
        })
        console.log("------slice3------");
        arr.slice(2,-1).forEach((element,index)=>{
            console.log("index = "+index);
            console.log("value = "+element);
        })
        
        //splice 方法：该方法返回一个数组，该数组包含从start位置开始删除deleteCount个元素。 
        //参数解释：start：开始位置。 deleteCount：删除的元素个数。 item1, item2, ...：要添加的元素到原数组。
        console.log("------splice------");
        arr.splice(1,2,"add").forEach((element,index)=>{
            console.log("index = "+index);
            console.log("value = "+element);
        })
        console.log(arr);

        //数组去重
        console.log("------去重------");
        var _arr = [1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10];
        var _arr2 = [];
        _arr.forEach((element,index)=>{
            if(_arr.indexOf(element) == index){
                console.log("index = "+index);
                console.log("value = "+element);
                _arr2.push(element);
            }
        })
        console.log(_arr2);
        console.log("------去重2------");
        for(var i = 0;i < _arr.length;i++){
            for(var j = i+1;j < _arr.length;j++){
                if(_arr[i] == _arr[j]){
                    _arr.splice(j,1);
                    j--;
                }
            }
        }
        console.log(_arr);

        //sort 方法：该方法对数组的元素进行排序，并以升序或降序返回数组。
        //入参函数：该函数接收两个参数，返回一个整数，如果返回值小于0，则a会排在b之前，如果返回值大于0，则a会排在b之后，如果返回值等于0，则a和b会排在同一位置。
        //默认UNICODE升序排序
        console.log("------sort------");
        var _arr3 = [1,2,3,4,5,6,7,8,9,10,1,2,3,4,5] ;
        _arr3.sort((a,b)=>{
            return a-b;
        })
        _arr3.forEach((element,index)=>{
            console.log("index = "+index+" value = "+element);
        })
            

    </script>
</head>
<body>
    
</body>
</html>